import com.alibaba.alimonitor.jmonitor.utils.StringUtils
import com.alibaba.moco.RedisPoolInstance
import com.alibaba.moco.util.BaseTypeUtil
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import redis.clients.jedis.Jedis
import script.GlobalValues
import script.moco.dto.DriverCancelOrderRequest
import script.moco.dto.DriverCancelOrderResponse
import script.moco.dto.OrderInfo
import script.v1.didiCallback.NoticeCallback
import script.v1.didiCallback.NotifyRequest
//模拟司机取消订单
def excute(data) {

    Jedis redis = RedisPoolInstance.getRedisClient();
    def params = data.getParameterMap();
    def request = BaseTypeUtil.mapToBean(params, DriverCancelOrderRequest.class) as DriverCancelOrderRequest;//请求数据转换为对象

    def response = new DriverCancelOrderResponse();//定义响应对象

    def jsonStr = redis.get(GlobalValues.KEY_ORDER + request.getOrderId());//从 Redis中获取 json 订单字符串

    if (jsonStr == null) {//验证订单是否存在
        response.setSuccess("false");
        response.setErrorMsg("订单id不存在 !");
        response.setErrorCode(39001);
        response.setErrorLevel(1);

        return response;
    }

    def slurper = new JsonSlurper();
    def detailMap = slurper.parseText(jsonStr);    //从json字符串变成json对象

    if (!detailMap.containsKey("order")) {
        response.setSuccess("false");
        response.setErrorMsg("订单不存在 !");
        response.setErrorCode(39001);
        response.setErrorLevel(1);

        return response;
    }

    def jsonMap = detailMap.get("order");
    def taxiObj = BaseTypeUtil.jsonToBean(jsonMap, OrderInfo.class) as OrderInfo;//将json对象转换为OrderInfo对象

    //司机取消订单完善数据
    taxiObj.setDlng(request.getDriverLongitude());
    taxiObj.setDlat(request.getDriverLatitude());
    //taxiObj.setDriverGeotype(request.getDriverGeotype());
    taxiObj.setStatus(610);
    taxiObj.setSub_status(0);
    //taxiObj.setSub_status(6101);

    detailMap.put("order", taxiObj)

    redis.set(GlobalValues.KEY_ORDER + taxiObj.getId(), JsonOutput.toJson(detailMap).toString())    //直接覆盖原有数据，进行修改

    //司机取消订单成后进行回调

    //通知回调
    NoticeCallback noticeCallbackTool = new NoticeCallback();
    NotifyRequest notifyRequest = new NotifyRequest();
    notifyRequest.setOrderId(taxiObj.getId());
    notifyRequest.setNotifyType(2);
    notifyRequest.setNotifyDesc("订单终态通知[取消订单无需支付]");
    String url = noticeCallbackTool.getCallbackUrlFromRequest(data)
    if (StringUtils.isNotBlank(url)) {
        response.setSuccess("true");
        response.setErrorMsg(null);
        response.setErrorCode(0);
        response.setErrorLevel(0);
        response.setContent(noticeCallbackTool.handNotify(url, notifyRequest));
    } else {
        response.setSuccess("false");
        response.setErrorMsg("session 中不存在callback地址");
        response.setErrorCode(-1);
        response.setErrorLevel(0);
    }


    return response;
}